package com.huitong.common.core.annotation;

import com.huitong.common.core.enums.IdType;
import com.huitong.common.core.validator.IdValidator;
import jakarta.validation.Constraint;
import jakarta.validation.Payload;

import java.lang.annotation.*;

/**
 * id字段参数校验注解
 *
 * @author fromdrowning
 * @date 2024/4/30 下午8:22
 */
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD, ElementType.PARAMETER, ElementType.TYPE_USE})
@Constraint(validatedBy = IdValidator.class)
public @interface Id {

    /**
     * 字段类型
     *
     * @return id字段参数校验类型
     */
    IdType type();

    /**
     * 是否允许为空 默认{@code false}不允许
     *
     * @return {@code true} 允许为空
     */
    boolean allowNull() default false;

    /**
     * 校验失败提示信息
     *
     * @return 校验失败提示信息
     */
    String message() default "id字段参数校验失败";

    /**
     * 校验分组
     *
     * @return 校验分组
     */
    Class<?>[] groups() default {};

    /**
     * 校验分组并标识应用于当前上下文的验证规则
     *
     * @return 校验分组并标识应用于当前上下文的验证规则
     */
    Class<? extends Payload>[] payload() default {};

}
